package com.core.ingenium.model;

import java.io.Serializable;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@NamedQueries
({ 
    @NamedQuery(name = "Usuario.findAll", query = "select o from Usuario o"),
    @NamedQuery(name = "Usuario.findByName", query = "select o from Usuario o where o.nombreUsuario like :pnombreUsuario"),
    @NamedQuery(name = "Usuario.findByFiltro", query = "select o from Usuario o where o.nombre like :pfiltro or o.apellido1 like :pfiltro or o.apellido2 like :pfiltro")


})
@Table(name = "\"usuario\"")
public class Usuario implements Serializable {
    @Column(name = "apellido1")
    private String apellido1;
    @Column(name = "apellido2")
    private String apellido2;
    @Column(name = "clave")
    private String clave;
    @Column(name = "correo")
    private String correo;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private int id;
    @Column(name = "identificacion")
    private String identificacion;
    @Column(name = "nombre")
    private String nombre;
    @Column(name = "nombreUsuario")
    private String nombreUsuario;
    
    @OneToMany(mappedBy = "usuario")
    private List<UsuarioCarrera> lstUsuarioCarrera;

    @ManyToOne
    @JoinColumn(name = "rol")
    private Rol rol;
    
    public Usuario() {
    }

    public Usuario(String apellido1, String apellido2, String clave, String correo, int id, String identificacion,
                   String nombre, String nombreUsuario, Rol rol) {
        this.apellido1 = apellido1;
        this.apellido2 = apellido2;
        this.clave = clave;
        this.correo = correo;
        this.id = id;
        this.identificacion = identificacion;
        this.nombre = nombre;
        this.nombreUsuario = nombreUsuario;
        this.rol = rol;
    }

    public Carrera getCarrera(){
        if(getLstUsuarioCarrera().size() == 0) return null; else return lstUsuarioCarrera.get(0).getCarrera();
    }

    public String getApellido1() {
        return apellido1;
    }

    public void setApellido1(String apellido1) {
        this.apellido1 = apellido1;
    }

    public String getApellido2() {
        return apellido2;
    }

    public void setApellido2(String apellido2) {
        this.apellido2 = apellido2;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getIdentificacion() {
        return identificacion;
    }

    public void setIdentificacion(String identificacion) {
        this.identificacion = identificacion;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }


    public void setRol(Rol rol) {
        this.rol = rol;
    }

    public List<UsuarioCarrera> getLstUsuarioCarrera() {
        return lstUsuarioCarrera;
    }

    public void setLstUsuarioCarrera(List<UsuarioCarrera> lstUsuarioCarrera) {
        this.lstUsuarioCarrera = lstUsuarioCarrera;
    }

    public UsuarioCarrera addUsuarioCarrera(UsuarioCarrera usuarioCarrera) {
        getLstUsuarioCarrera().add(usuarioCarrera);
        usuarioCarrera.setUsuario(this);
        return usuarioCarrera;
    }

    public UsuarioCarrera removeUsuarioCarrera(UsuarioCarrera usuarioCarrera) {
        getLstUsuarioCarrera().remove(usuarioCarrera);
        usuarioCarrera.setUsuario(null);
        return usuarioCarrera;
    }

    public Rol getRol() {
        return rol;
    }
}
